#include "precomp.h"
//////////////////////////////////////////////////////////////////////////////
//
// evcl - boot - Build 13 Characters
// boot/bt_build_13_char.cpp
//
// This file is part of Evita Common Lisp.
//
// Copyright (C) 1996-2007 by Project Vogue.
// Written by Yoshifumi "VOGUE" INOUE. (yosi@msn.com)
//
// @(#)$Id: //proj/evcl3/mainline/boot/bt_build_13_char.cpp#2 $
//
#include "../mini/mini_lisp.h"

namespace Boot
{

using namespace MiniLisp;

Val defconstant(const char16*, Val);
Val deftype(Val, Val);

struct CatEntry
{
    uint16  m_nMin;
    uint16  m_nMax;
    uint16  m_nCategory;
}; // CatEntry

static const CatEntry s_rgoCatEntry[] =
{
    { 0, 31, 1 },
    { 32, 32, 29 },
    { 33, 35, 21 },
    { 36, 36, 23 },
    { 37, 39, 21 },
    { 40, 40, 22 },
    { 41, 41, 18 },
    { 42, 42, 21 },
    { 43, 43, 25 },
    { 44, 44, 21 },
    { 45, 45, 17 },
    { 46, 47, 21 },
    { 48, 57, 13 },
    { 58, 59, 21 },
    { 60, 62, 25 },
    { 63, 64, 21 },
    { 65, 90, 7 },
    { 91, 91, 22 },
    { 92, 92, 21 },
    { 93, 93, 18 },
    { 94, 94, 24 },
    { 95, 95, 16 },
    { 96, 96, 24 },
    { 97, 122, 5 },
    { 123, 123, 22 },
    { 124, 124, 25 },
    { 125, 125, 18 },
    { 126, 126, 25 },
    { 127, 159, 1 },
    { 160, 160, 29 },
    { 161, 161, 21 },
    { 162, 165, 23 },
    { 166, 167, 26 },
    { 168, 168, 24 },
    { 169, 169, 26 },
    { 170, 170, 5 },
    { 171, 171, 20 },
    { 172, 172, 25 },
    { 173, 173, 2 },
    { 174, 174, 26 },
    { 175, 175, 24 },
    { 176, 176, 26 },
    { 177, 177, 25 },
    { 178, 179, 15 },
    { 180, 180, 24 },
    { 181, 181, 5 },
    { 182, 182, 26 },
    { 183, 183, 21 },
    { 184, 184, 24 },
    { 185, 185, 15 },
    { 186, 186, 5 },
    { 187, 187, 19 },
    { 188, 190, 15 },
    { 191, 191, 21 },
    { 192, 214, 7 },
    { 215, 215, 25 },
    { 216, 222, 7 },
    { 223, 246, 5 },
    { 247, 247, 25 },
    { 248, 255, 5 },
    { 256, 256, 7 },
    { 257, 257, 5 },
    { 258, 258, 7 },
    { 259, 259, 5 },
    { 260, 260, 7 },
    { 261, 261, 5 },
    { 262, 262, 7 },
    { 263, 263, 5 },
    { 264, 264, 7 },
    { 265, 265, 5 },
    { 266, 266, 7 },
    { 267, 267, 5 },
    { 268, 268, 7 },
    { 269, 269, 5 },
    { 270, 270, 7 },
    { 271, 271, 5 },
    { 272, 272, 7 },
    { 273, 273, 5 },
    { 274, 274, 7 },
    { 275, 275, 5 },
    { 276, 276, 7 },
    { 277, 277, 5 },
    { 278, 278, 7 },
    { 279, 279, 5 },
    { 280, 280, 7 },
    { 281, 281, 5 },
    { 282, 282, 7 },
    { 283, 283, 5 },
    { 284, 284, 7 },
    { 285, 285, 5 },
    { 286, 286, 7 },
    { 287, 287, 5 },
    { 288, 288, 7 },
    { 289, 289, 5 },
    { 290, 290, 7 },
    { 291, 291, 5 },
    { 292, 292, 7 },
    { 293, 293, 5 },
    { 294, 294, 7 },
    { 295, 295, 5 },
    { 296, 296, 7 },
    { 297, 297, 5 },
    { 298, 298, 7 },
    { 299, 299, 5 },
    { 300, 300, 7 },
    { 301, 301, 5 },
    { 302, 302, 7 },
    { 303, 303, 5 },
    { 304, 304, 7 },
    { 305, 305, 5 },
    { 306, 306, 7 },
    { 307, 307, 5 },
    { 308, 308, 7 },
    { 309, 309, 5 },
    { 310, 310, 7 },
    { 311, 312, 5 },
    { 313, 313, 7 },
    { 314, 314, 5 },
    { 315, 315, 7 },
    { 316, 316, 5 },
    { 317, 317, 7 },
    { 318, 318, 5 },
    { 319, 319, 7 },
    { 320, 320, 5 },
    { 321, 321, 7 },
    { 322, 322, 5 },
    { 323, 323, 7 },
    { 324, 324, 5 },
    { 325, 325, 7 },
    { 326, 326, 5 },
    { 327, 327, 7 },
    { 328, 329, 5 },
    { 330, 330, 7 },
    { 331, 331, 5 },
    { 332, 332, 7 },
    { 333, 333, 5 },
    { 334, 334, 7 },
    { 335, 335, 5 },
    { 336, 336, 7 },
    { 337, 337, 5 },
    { 338, 338, 7 },
    { 339, 339, 5 },
    { 340, 340, 7 },
    { 341, 341, 5 },
    { 342, 342, 7 },
    { 343, 343, 5 },
    { 344, 344, 7 },
    { 345, 345, 5 },
    { 346, 346, 7 },
    { 347, 347, 5 },
    { 348, 348, 7 },
    { 349, 349, 5 },
    { 350, 350, 7 },
    { 351, 351, 5 },
    { 352, 352, 7 },
    { 353, 353, 5 },
    { 354, 354, 7 },
    { 355, 355, 5 },
    { 356, 356, 7 },
    { 357, 357, 5 },
    { 358, 358, 7 },
    { 359, 359, 5 },
    { 360, 360, 7 },
    { 361, 361, 5 },
    { 362, 362, 7 },
    { 363, 363, 5 },
    { 364, 364, 7 },
    { 365, 365, 5 },
    { 366, 366, 7 },
    { 367, 367, 5 },
    { 368, 368, 7 },
    { 369, 369, 5 },
    { 370, 370, 7 },
    { 371, 371, 5 },
    { 372, 372, 7 },
    { 373, 373, 5 },
    { 374, 374, 7 },
    { 375, 375, 5 },
    { 376, 377, 7 },
    { 378, 378, 5 },
    { 379, 379, 7 },
    { 380, 380, 5 },
    { 381, 381, 7 },
    { 382, 384, 5 },
    { 385, 386, 7 },
    { 387, 387, 5 },
    { 388, 388, 7 },
    { 389, 389, 5 },
    { 390, 391, 7 },
    { 392, 392, 5 },
    { 393, 395, 7 },
    { 396, 397, 5 },
    { 398, 401, 7 },
    { 402, 402, 5 },
    { 403, 404, 7 },
    { 405, 405, 5 },
    { 406, 408, 7 },
    { 409, 411, 5 },
    { 412, 413, 7 },
    { 414, 414, 5 },
    { 415, 416, 7 },
    { 417, 417, 5 },
    { 418, 418, 7 },
    { 419, 419, 5 },
    { 420, 420, 7 },
    { 421, 421, 5 },
    { 422, 423, 7 },
    { 424, 424, 5 },
    { 425, 425, 7 },
    { 426, 427, 5 },
    { 428, 428, 7 },
    { 429, 429, 5 },
    { 430, 431, 7 },
    { 432, 432, 5 },
    { 433, 435, 7 },
    { 436, 436, 5 },
    { 437, 437, 7 },
    { 438, 438, 5 },
    { 439, 440, 7 },
    { 441, 442, 5 },
    { 443, 443, 9 },
    { 444, 444, 7 },
    { 445, 447, 5 },
    { 448, 451, 9 },
    { 452, 452, 7 },
    { 453, 453, 6 },
    { 454, 454, 5 },
    { 455, 455, 7 },
    { 456, 456, 6 },
    { 457, 457, 5 },
    { 458, 458, 7 },
    { 459, 459, 6 },
    { 460, 460, 5 },
    { 461, 461, 7 },
    { 462, 462, 5 },
    { 463, 463, 7 },
    { 464, 464, 5 },
    { 465, 465, 7 },
    { 466, 466, 5 },
    { 467, 467, 7 },
    { 468, 468, 5 },
    { 469, 469, 7 },
    { 470, 470, 5 },
    { 471, 471, 7 },
    { 472, 472, 5 },
    { 473, 473, 7 },
    { 474, 474, 5 },
    { 475, 475, 7 },
    { 476, 477, 5 },
    { 478, 478, 7 },
    { 479, 479, 5 },
    { 480, 480, 7 },
    { 481, 481, 5 },
    { 482, 482, 7 },
    { 483, 483, 5 },
    { 484, 484, 7 },
    { 485, 485, 5 },
    { 486, 486, 7 },
    { 487, 487, 5 },
    { 488, 488, 7 },
    { 489, 489, 5 },
    { 490, 490, 7 },
    { 491, 491, 5 },
    { 492, 492, 7 },
    { 493, 493, 5 },
    { 494, 494, 7 },
    { 495, 496, 5 },
    { 497, 497, 7 },
    { 498, 498, 6 },
    { 499, 499, 5 },
    { 500, 500, 7 },
    { 501, 501, 5 },
    { 502, 504, 7 },
    { 505, 505, 5 },
    { 506, 506, 7 },
    { 507, 507, 5 },
    { 508, 508, 7 },
    { 509, 509, 5 },
    { 510, 510, 7 },
    { 511, 511, 5 },
    { 512, 512, 7 },
    { 513, 513, 5 },
    { 514, 514, 7 },
    { 515, 515, 5 },
    { 516, 516, 7 },
    { 517, 517, 5 },
    { 518, 518, 7 },
    { 519, 519, 5 },
    { 520, 520, 7 },
    { 521, 521, 5 },
    { 522, 522, 7 },
    { 523, 523, 5 },
    { 524, 524, 7 },
    { 525, 525, 5 },
    { 526, 526, 7 },
    { 527, 527, 5 },
    { 528, 528, 7 },
    { 529, 529, 5 },
    { 530, 530, 7 },
    { 531, 531, 5 },
    { 532, 532, 7 },
    { 533, 533, 5 },
    { 534, 534, 7 },
    { 535, 535, 5 },
    { 536, 536, 7 },
    { 537, 537, 5 },
    { 538, 538, 7 },
    { 539, 539, 5 },
    { 540, 540, 7 },
    { 541, 541, 5 },
    { 542, 542, 7 },
    { 543, 543, 5 },
    { 544, 544, 7 },
    { 545, 545, 5 },
    { 546, 546, 7 },
    { 547, 547, 5 },
    { 548, 548, 7 },
    { 549, 549, 5 },
    { 550, 550, 7 },
    { 551, 551, 5 },
    { 552, 552, 7 },
    { 553, 553, 5 },
    { 554, 554, 7 },
    { 555, 555, 5 },
    { 556, 556, 7 },
    { 557, 557, 5 },
    { 558, 558, 7 },
    { 559, 559, 5 },
    { 560, 560, 7 },
    { 561, 561, 5 },
    { 562, 562, 7 },
    { 563, 566, 5 },
    { 592, 687, 5 },
    { 688, 705, 8 },
    { 706, 709, 24 },
    { 710, 721, 8 },
    { 722, 735, 24 },
    { 736, 740, 8 },
    { 741, 749, 24 },
    { 750, 750, 8 },
    { 751, 767, 24 },
    { 768, 855, 12 },
    { 861, 879, 12 },
    { 884, 885, 24 },
    { 890, 890, 8 },
    { 894, 894, 21 },
    { 900, 901, 24 },
    { 902, 902, 7 },
    { 903, 903, 21 },
    { 904, 906, 7 },
    { 908, 908, 7 },
    { 910, 911, 7 },
    { 912, 912, 5 },
    { 913, 929, 7 },
    { 931, 939, 7 },
    { 940, 974, 5 },
    { 976, 977, 5 },
    { 978, 980, 7 },
    { 981, 983, 5 },
    { 984, 984, 7 },
    { 985, 985, 5 },
    { 986, 986, 7 },
    { 987, 987, 5 },
    { 988, 988, 7 },
    { 989, 989, 5 },
    { 990, 990, 7 },
    { 991, 991, 5 },
    { 992, 992, 7 },
    { 993, 993, 5 },
    { 994, 994, 7 },
    { 995, 995, 5 },
    { 996, 996, 7 },
    { 997, 997, 5 },
    { 998, 998, 7 },
    { 999, 999, 5 },
    { 1000, 1000, 7 },
    { 1001, 1001, 5 },
    { 1002, 1002, 7 },
    { 1003, 1003, 5 },
    { 1004, 1004, 7 },
    { 1005, 1005, 5 },
    { 1006, 1006, 7 },
    { 1007, 1011, 5 },
    { 1012, 1012, 7 },
    { 1013, 1013, 5 },
    { 1014, 1014, 25 },
    { 1015, 1015, 7 },
    { 1016, 1016, 5 },
    { 1017, 1018, 7 },
    { 1019, 1019, 5 },
    { 1024, 1071, 7 },
    { 1072, 1119, 5 },
    { 1120, 1120, 7 },
    { 1121, 1121, 5 },
    { 1122, 1122, 7 },
    { 1123, 1123, 5 },
    { 1124, 1124, 7 },
    { 1125, 1125, 5 },
    { 1126, 1126, 7 },
    { 1127, 1127, 5 },
    { 1128, 1128, 7 },
    { 1129, 1129, 5 },
    { 1130, 1130, 7 },
    { 1131, 1131, 5 },
    { 1132, 1132, 7 },
    { 1133, 1133, 5 },
    { 1134, 1134, 7 },
    { 1135, 1135, 5 },
    { 1136, 1136, 7 },
    { 1137, 1137, 5 },
    { 1138, 1138, 7 },
    { 1139, 1139, 5 },
    { 1140, 1140, 7 },
    { 1141, 1141, 5 },
    { 1142, 1142, 7 },
    { 1143, 1143, 5 },
    { 1144, 1144, 7 },
    { 1145, 1145, 5 },
    { 1146, 1146, 7 },
    { 1147, 1147, 5 },
    { 1148, 1148, 7 },
    { 1149, 1149, 5 },
    { 1150, 1150, 7 },
    { 1151, 1151, 5 },
    { 1152, 1152, 7 },
    { 1153, 1153, 5 },
    { 1154, 1154, 26 },
    { 1155, 1158, 12 },
    { 1160, 1161, 11 },
    { 1162, 1162, 7 },
    { 1163, 1163, 5 },
    { 1164, 1164, 7 },
    { 1165, 1165, 5 },
    { 1166, 1166, 7 },
    { 1167, 1167, 5 },
    { 1168, 1168, 7 },
    { 1169, 1169, 5 },
    { 1170, 1170, 7 },
    { 1171, 1171, 5 },
    { 1172, 1172, 7 },
    { 1173, 1173, 5 },
    { 1174, 1174, 7 },
    { 1175, 1175, 5 },
    { 1176, 1176, 7 },
    { 1177, 1177, 5 },
    { 1178, 1178, 7 },
    { 1179, 1179, 5 },
    { 1180, 1180, 7 },
    { 1181, 1181, 5 },
    { 1182, 1182, 7 },
    { 1183, 1183, 5 },
    { 1184, 1184, 7 },
    { 1185, 1185, 5 },
    { 1186, 1186, 7 },
    { 1187, 1187, 5 },
    { 1188, 1188, 7 },
    { 1189, 1189, 5 },
    { 1190, 1190, 7 },
    { 1191, 1191, 5 },
    { 1192, 1192, 7 },
    { 1193, 1193, 5 },
    { 1194, 1194, 7 },
    { 1195, 1195, 5 },
    { 1196, 1196, 7 },
    { 1197, 1197, 5 },
    { 1198, 1198, 7 },
    { 1199, 1199, 5 },
    { 1200, 1200, 7 },
    { 1201, 1201, 5 },
    { 1202, 1202, 7 },
    { 1203, 1203, 5 },
    { 1204, 1204, 7 },
    { 1205, 1205, 5 },
    { 1206, 1206, 7 },
    { 1207, 1207, 5 },
    { 1208, 1208, 7 },
    { 1209, 1209, 5 },
    { 1210, 1210, 7 },
    { 1211, 1211, 5 },
    { 1212, 1212, 7 },
    { 1213, 1213, 5 },
    { 1214, 1214, 7 },
    { 1215, 1215, 5 },
    { 1216, 1217, 7 },
    { 1218, 1218, 5 },
    { 1219, 1219, 7 },
    { 1220, 1220, 5 },
    { 1221, 1221, 7 },
    { 1222, 1222, 5 },
    { 1223, 1223, 7 },
    { 1224, 1224, 5 },
    { 1225, 1225, 7 },
    { 1226, 1226, 5 },
    { 1227, 1227, 7 },
    { 1228, 1228, 5 },
    { 1229, 1229, 7 },
    { 1230, 1230, 5 },
    { 1232, 1232, 7 },
    { 1233, 1233, 5 },
    { 1234, 1234, 7 },
    { 1235, 1235, 5 },
    { 1236, 1236, 7 },
    { 1237, 1237, 5 },
    { 1238, 1238, 7 },
    { 1239, 1239, 5 },
    { 1240, 1240, 7 },
    { 1241, 1241, 5 },
    { 1242, 1242, 7 },
    { 1243, 1243, 5 },
    { 1244, 1244, 7 },
    { 1245, 1245, 5 },
    { 1246, 1246, 7 },
    { 1247, 1247, 5 },
    { 1248, 1248, 7 },
    { 1249, 1249, 5 },
    { 1250, 1250, 7 },
    { 1251, 1251, 5 },
    { 1252, 1252, 7 },
    { 1253, 1253, 5 },
    { 1254, 1254, 7 },
    { 1255, 1255, 5 },
    { 1256, 1256, 7 },
    { 1257, 1257, 5 },
    { 1258, 1258, 7 },
    { 1259, 1259, 5 },
    { 1260, 1260, 7 },
    { 1261, 1261, 5 },
    { 1262, 1262, 7 },
    { 1263, 1263, 5 },
    { 1264, 1264, 7 },
    { 1265, 1265, 5 },
    { 1266, 1266, 7 },
    { 1267, 1267, 5 },
    { 1268, 1268, 7 },
    { 1269, 1269, 5 },
    { 1272, 1272, 7 },
    { 1273, 1273, 5 },
    { 1280, 1280, 7 },
    { 1281, 1281, 5 },
    { 1282, 1282, 7 },
    { 1283, 1283, 5 },
    { 1284, 1284, 7 },
    { 1285, 1285, 5 },
    { 1286, 1286, 7 },
    { 1287, 1287, 5 },
    { 1288, 1288, 7 },
    { 1289, 1289, 5 },
    { 1290, 1290, 7 },
    { 1291, 1291, 5 },
    { 1292, 1292, 7 },
    { 1293, 1293, 5 },
    { 1294, 1294, 7 },
    { 1295, 1295, 5 },
    { 1329, 1366, 7 },
    { 1369, 1369, 8 },
    { 1370, 1375, 21 },
    { 1377, 1415, 5 },
    { 1417, 1417, 21 },
    { 1418, 1418, 17 },
    { 1425, 1441, 12 },
    { 1443, 1465, 12 },
    { 1467, 1469, 12 },
    { 1470, 1470, 21 },
    { 1471, 1471, 12 },
    { 1472, 1472, 21 },
    { 1473, 1474, 12 },
    { 1475, 1475, 21 },
    { 1476, 1476, 12 },
    { 1488, 1514, 9 },
    { 1520, 1522, 9 },
    { 1523, 1524, 21 },
    { 1536, 1539, 2 },
    { 1548, 1549, 21 },
    { 1550, 1551, 26 },
    { 1552, 1557, 12 },
    { 1563, 1563, 21 },
    { 1567, 1567, 21 },
    { 1569, 1594, 9 },
    { 1600, 1600, 8 },
    { 1601, 1610, 9 },
    { 1611, 1624, 12 },
    { 1632, 1641, 13 },
    { 1642, 1645, 21 },
    { 1646, 1647, 9 },
    { 1648, 1648, 12 },
    { 1649, 1747, 9 },
    { 1748, 1748, 21 },
    { 1749, 1749, 9 },
    { 1750, 1756, 12 },
    { 1757, 1757, 2 },
    { 1758, 1758, 11 },
    { 1759, 1764, 12 },
    { 1765, 1766, 8 },
    { 1767, 1768, 12 },
    { 1769, 1769, 26 },
    { 1770, 1773, 12 },
    { 1774, 1775, 9 },
    { 1776, 1785, 13 },
    { 1786, 1788, 9 },
    { 1789, 1790, 26 },
    { 1791, 1791, 9 },
    { 1792, 1805, 21 },
    { 1807, 1807, 2 },
    { 1808, 1808, 9 },
    { 1809, 1809, 12 },
    { 1810, 1839, 9 },
    { 1840, 1866, 12 },
    { 1869, 1871, 9 },
    { 1920, 1957, 9 },
    { 1958, 1968, 12 },
    { 1969, 1969, 9 },
    { 2305, 2306, 12 },
    { 2307, 2307, 10 },
    { 2308, 2361, 9 },
    { 2364, 2364, 12 },
    { 2365, 2365, 9 },
    { 2366, 2368, 10 },
    { 2369, 2376, 12 },
    { 2377, 2380, 10 },
    { 2381, 2381, 12 },
    { 2384, 2384, 9 },
    { 2385, 2388, 12 },
    { 2392, 2401, 9 },
    { 2402, 2403, 12 },
    { 2404, 2405, 21 },
    { 2406, 2415, 13 },
    { 2416, 2416, 21 },
    { 2433, 2433, 12 },
    { 2434, 2435, 10 },
    { 2437, 2444, 9 },
    { 2447, 2448, 9 },
    { 2451, 2472, 9 },
    { 2474, 2480, 9 },
    { 2482, 2482, 9 },
    { 2486, 2489, 9 },
    { 2492, 2492, 12 },
    { 2493, 2493, 9 },
    { 2494, 2496, 10 },
    { 2497, 2500, 12 },
    { 2503, 2504, 10 },
    { 2507, 2508, 10 },
    { 2509, 2509, 12 },
    { 2519, 2519, 10 },
    { 2524, 2525, 9 },
    { 2527, 2529, 9 },
    { 2530, 2531, 12 },
    { 2534, 2543, 13 },
    { 2544, 2545, 9 },
    { 2546, 2547, 23 },
    { 2548, 2553, 15 },
    { 2554, 2554, 26 },
    { 2561, 2562, 12 },
    { 2563, 2563, 10 },
    { 2565, 2570, 9 },
    { 2575, 2576, 9 },
    { 2579, 2600, 9 },
    { 2602, 2608, 9 },
    { 2610, 2611, 9 },
    { 2613, 2614, 9 },
    { 2616, 2617, 9 },
    { 2620, 2620, 12 },
    { 2622, 2624, 10 },
    { 2625, 2626, 12 },
    { 2631, 2632, 12 },
    { 2635, 2637, 12 },
    { 2649, 2652, 9 },
    { 2654, 2654, 9 },
    { 2662, 2671, 13 },
    { 2672, 2673, 12 },
    { 2674, 2676, 9 },
    { 2689, 2690, 12 },
    { 2691, 2691, 10 },
    { 2693, 2701, 9 },
    { 2703, 2705, 9 },
    { 2707, 2728, 9 },
    { 2730, 2736, 9 },
    { 2738, 2739, 9 },
    { 2741, 2745, 9 },
    { 2748, 2748, 12 },
    { 2749, 2749, 9 },
    { 2750, 2752, 10 },
    { 2753, 2757, 12 },
    { 2759, 2760, 12 },
    { 2761, 2761, 10 },
    { 2763, 2764, 10 },
    { 2765, 2765, 12 },
    { 2768, 2768, 9 },
    { 2784, 2785, 9 },
    { 2786, 2787, 12 },
    { 2790, 2799, 13 },
    { 2801, 2801, 23 },
    { 2817, 2817, 12 },
    { 2818, 2819, 10 },
    { 2821, 2828, 9 },
    { 2831, 2832, 9 },
    { 2835, 2856, 9 },
    { 2858, 2864, 9 },
    { 2866, 2867, 9 },
    { 2869, 2873, 9 },
    { 2876, 2876, 12 },
    { 2877, 2877, 9 },
    { 2878, 2878, 10 },
    { 2879, 2879, 12 },
    { 2880, 2880, 10 },
    { 2881, 2883, 12 },
    { 2887, 2888, 10 },
    { 2891, 2892, 10 },
    { 2893, 2893, 12 },
    { 2902, 2902, 12 },
    { 2903, 2903, 10 },
    { 2908, 2909, 9 },
    { 2911, 2913, 9 },
    { 2918, 2927, 13 },
    { 2928, 2928, 26 },
    { 2929, 2929, 9 },
    { 2946, 2946, 12 },
    { 2947, 2947, 9 },
    { 2949, 2954, 9 },
    { 2958, 2960, 9 },
    { 2962, 2965, 9 },
    { 2969, 2970, 9 },
    { 2972, 2972, 9 },
    { 2974, 2975, 9 },
    { 2979, 2980, 9 },
    { 2984, 2986, 9 },
    { 2990, 2997, 9 },
    { 2999, 3001, 9 },
    { 3006, 3007, 10 },
    { 3008, 3008, 12 },
    { 3009, 3010, 10 },
    { 3014, 3016, 10 },
    { 3018, 3020, 10 },
    { 3021, 3021, 12 },
    { 3031, 3031, 10 },
    { 3047, 3055, 13 },
    { 3056, 3058, 15 },
    { 3059, 3064, 26 },
    { 3065, 3065, 23 },
    { 3066, 3066, 26 },
    { 3073, 3075, 10 },
    { 3077, 3084, 9 },
    { 3086, 3088, 9 },
    { 3090, 3112, 9 },
    { 3114, 3123, 9 },
    { 3125, 3129, 9 },
    { 3134, 3136, 12 },
    { 3137, 3140, 10 },
    { 3142, 3144, 12 },
    { 3146, 3149, 12 },
    { 3157, 3158, 12 },
    { 3168, 3169, 9 },
    { 3174, 3183, 13 },
    { 3202, 3203, 10 },
    { 3205, 3212, 9 },
    { 3214, 3216, 9 },
    { 3218, 3240, 9 },
    { 3242, 3251, 9 },
    { 3253, 3257, 9 },
    { 3260, 3260, 12 },
    { 3261, 3261, 9 },
    { 3262, 3262, 10 },
    { 3263, 3263, 12 },
    { 3264, 3268, 10 },
    { 3270, 3270, 12 },
    { 3271, 3272, 10 },
    { 3274, 3275, 10 },
    { 3276, 3277, 12 },
    { 3285, 3286, 10 },
    { 3294, 3294, 9 },
    { 3296, 3297, 9 },
    { 3302, 3311, 13 },
    { 3330, 3331, 10 },
    { 3333, 3340, 9 },
    { 3342, 3344, 9 },
    { 3346, 3368, 9 },
    { 3370, 3385, 9 },
    { 3390, 3392, 10 },
    { 3393, 3395, 12 },
    { 3398, 3400, 10 },
    { 3402, 3404, 10 },
    { 3405, 3405, 12 },
    { 3415, 3415, 10 },
    { 3424, 3425, 9 },
    { 3430, 3439, 13 },
    { 3458, 3459, 10 },
    { 3461, 3478, 9 },
    { 3482, 3505, 9 },
    { 3507, 3515, 9 },
    { 3517, 3517, 9 },
    { 3520, 3526, 9 },
    { 3530, 3530, 12 },
    { 3535, 3537, 10 },
    { 3538, 3540, 12 },
    { 3542, 3542, 12 },
    { 3544, 3551, 10 },
    { 3570, 3571, 10 },
    { 3572, 3572, 21 },
    { 3585, 3632, 9 },
    { 3633, 3633, 12 },
    { 3634, 3635, 9 },
    { 3636, 3642, 12 },
    { 3647, 3647, 23 },
    { 3648, 3653, 9 },
    { 3654, 3654, 8 },
    { 3655, 3662, 12 },
    { 3663, 3663, 21 },
    { 3664, 3673, 13 },
    { 3674, 3675, 21 },
    { 3713, 3714, 9 },
    { 3716, 3716, 9 },
    { 3719, 3720, 9 },
    { 3722, 3722, 9 },
    { 3725, 3725, 9 },
    { 3732, 3735, 9 },
    { 3737, 3743, 9 },
    { 3745, 3747, 9 },
    { 3749, 3749, 9 },
    { 3751, 3751, 9 },
    { 3754, 3755, 9 },
    { 3757, 3760, 9 },
    { 3761, 3761, 12 },
    { 3762, 3763, 9 },
    { 3764, 3769, 12 },
    { 3771, 3772, 12 },
    { 3773, 3773, 9 },
    { 3776, 3780, 9 },
    { 3782, 3782, 8 },
    { 3784, 3789, 12 },
    { 3792, 3801, 13 },
    { 3804, 3805, 9 },
    { 3840, 3840, 9 },
    { 3841, 3843, 26 },
    { 3844, 3858, 21 },
    { 3859, 3863, 26 },
    { 3864, 3865, 12 },
    { 3866, 3871, 26 },
    { 3872, 3881, 13 },
    { 3882, 3891, 15 },
    { 3892, 3892, 26 },
    { 3893, 3893, 12 },
    { 3894, 3894, 26 },
    { 3895, 3895, 12 },
    { 3896, 3896, 26 },
    { 3897, 3897, 12 },
    { 3898, 3898, 22 },
    { 3899, 3899, 18 },
    { 3900, 3900, 22 },
    { 3901, 3901, 18 },
    { 3902, 3903, 10 },
    { 3904, 3911, 9 },
    { 3913, 3946, 9 },
    { 3953, 3966, 12 },
    { 3967, 3967, 10 },
    { 3968, 3972, 12 },
    { 3973, 3973, 21 },
    { 3974, 3975, 12 },
    { 3976, 3979, 9 },
    { 3984, 3991, 12 },
    { 3993, 4028, 12 },
    { 4030, 4037, 26 },
    { 4038, 4038, 12 },
    { 4039, 4044, 26 },
    { 4047, 4047, 26 },
    { 4096, 4129, 9 },
    { 4131, 4135, 9 },
    { 4137, 4138, 9 },
    { 4140, 4140, 10 },
    { 4141, 4144, 12 },
    { 4145, 4145, 10 },
    { 4146, 4146, 12 },
    { 4150, 4151, 12 },
    { 4152, 4152, 10 },
    { 4153, 4153, 12 },
    { 4160, 4169, 13 },
    { 4170, 4175, 21 },
    { 4176, 4181, 9 },
    { 4182, 4183, 10 },
    { 4184, 4185, 12 },
    { 4256, 4293, 7 },
    { 4304, 4344, 9 },
    { 4347, 4347, 21 },
    { 4352, 4441, 9 },
    { 4447, 4514, 9 },
    { 4520, 4601, 9 },
    { 4608, 4614, 9 },
    { 4616, 4678, 9 },
    { 4680, 4680, 9 },
    { 4682, 4685, 9 },
    { 4688, 4694, 9 },
    { 4696, 4696, 9 },
    { 4698, 4701, 9 },
    { 4704, 4742, 9 },
    { 4744, 4744, 9 },
    { 4746, 4749, 9 },
    { 4752, 4782, 9 },
    { 4784, 4784, 9 },
    { 4786, 4789, 9 },
    { 4792, 4798, 9 },
    { 4800, 4800, 9 },
    { 4802, 4805, 9 },
    { 4808, 4814, 9 },
    { 4816, 4822, 9 },
    { 4824, 4846, 9 },
    { 4848, 4878, 9 },
    { 4880, 4880, 9 },
    { 4882, 4885, 9 },
    { 4888, 4894, 9 },
    { 4896, 4934, 9 },
    { 4936, 4954, 9 },
    { 4961, 4968, 21 },
    { 4969, 4977, 13 },
    { 4978, 4988, 15 },
    { 5024, 5108, 9 },
    { 5121, 5740, 9 },
    { 5741, 5742, 21 },
    { 5743, 5750, 9 },
    { 5760, 5760, 29 },
    { 5761, 5786, 9 },
    { 5787, 5787, 22 },
    { 5788, 5788, 18 },
    { 5792, 5866, 9 },
    { 5867, 5869, 21 },
    { 5870, 5872, 14 },
    { 5888, 5900, 9 },
    { 5902, 5905, 9 },
    { 5906, 5908, 12 },
    { 5920, 5937, 9 },
    { 5938, 5940, 12 },
    { 5941, 5942, 21 },
    { 5952, 5969, 9 },
    { 5970, 5971, 12 },
    { 5984, 5996, 9 },
    { 5998, 6000, 9 },
    { 6002, 6003, 12 },
    { 6016, 6067, 9 },
    { 6068, 6069, 2 },
    { 6070, 6070, 10 },
    { 6071, 6077, 12 },
    { 6078, 6085, 10 },
    { 6086, 6086, 12 },
    { 6087, 6088, 10 },
    { 6089, 6099, 12 },
    { 6100, 6102, 21 },
    { 6103, 6103, 8 },
    { 6104, 6106, 21 },
    { 6107, 6107, 23 },
    { 6108, 6108, 9 },
    { 6109, 6109, 12 },
    { 6112, 6121, 13 },
    { 6128, 6137, 15 },
    { 6144, 6149, 21 },
    { 6150, 6150, 17 },
    { 6151, 6154, 21 },
    { 6155, 6157, 12 },
    { 6158, 6158, 29 },
    { 6160, 6169, 13 },
    { 6176, 6210, 9 },
    { 6211, 6211, 8 },
    { 6212, 6263, 9 },
    { 6272, 6312, 9 },
    { 6313, 6313, 12 },
    { 6400, 6428, 9 },
    { 6432, 6434, 12 },
    { 6435, 6438, 10 },
    { 6439, 6440, 12 },
    { 6441, 6443, 10 },
    { 6448, 6449, 10 },
    { 6450, 6450, 12 },
    { 6451, 6456, 10 },
    { 6457, 6459, 12 },
    { 6464, 6464, 26 },
    { 6468, 6469, 21 },
    { 6470, 6479, 13 },
    { 6480, 6509, 9 },
    { 6512, 6516, 9 },
    { 6624, 6655, 26 },
    { 7424, 7467, 5 },
    { 7468, 7521, 8 },
    { 7522, 7531, 5 },
    { 7680, 7680, 7 },
    { 7681, 7681, 5 },
    { 7682, 7682, 7 },
    { 7683, 7683, 5 },
    { 7684, 7684, 7 },
    { 7685, 7685, 5 },
    { 7686, 7686, 7 },
    { 7687, 7687, 5 },
    { 7688, 7688, 7 },
    { 7689, 7689, 5 },
    { 7690, 7690, 7 },
    { 7691, 7691, 5 },
    { 7692, 7692, 7 },
    { 7693, 7693, 5 },
    { 7694, 7694, 7 },
    { 7695, 7695, 5 },
    { 7696, 7696, 7 },
    { 7697, 7697, 5 },
    { 7698, 7698, 7 },
    { 7699, 7699, 5 },
    { 7700, 7700, 7 },
    { 7701, 7701, 5 },
    { 7702, 7702, 7 },
    { 7703, 7703, 5 },
    { 7704, 7704, 7 },
    { 7705, 7705, 5 },
    { 7706, 7706, 7 },
    { 7707, 7707, 5 },
    { 7708, 7708, 7 },
    { 7709, 7709, 5 },
    { 7710, 7710, 7 },
    { 7711, 7711, 5 },
    { 7712, 7712, 7 },
    { 7713, 7713, 5 },
    { 7714, 7714, 7 },
    { 7715, 7715, 5 },
    { 7716, 7716, 7 },
    { 7717, 7717, 5 },
    { 7718, 7718, 7 },
    { 7719, 7719, 5 },
    { 7720, 7720, 7 },
    { 7721, 7721, 5 },
    { 7722, 7722, 7 },
    { 7723, 7723, 5 },
    { 7724, 7724, 7 },
    { 7725, 7725, 5 },
    { 7726, 7726, 7 },
    { 7727, 7727, 5 },
    { 7728, 7728, 7 },
    { 7729, 7729, 5 },
    { 7730, 7730, 7 },
    { 7731, 7731, 5 },
    { 7732, 7732, 7 },
    { 7733, 7733, 5 },
    { 7734, 7734, 7 },
    { 7735, 7735, 5 },
    { 7736, 7736, 7 },
    { 7737, 7737, 5 },
    { 7738, 7738, 7 },
    { 7739, 7739, 5 },
    { 7740, 7740, 7 },
    { 7741, 7741, 5 },
    { 7742, 7742, 7 },
    { 7743, 7743, 5 },
    { 7744, 7744, 7 },
    { 7745, 7745, 5 },
    { 7746, 7746, 7 },
    { 7747, 7747, 5 },
    { 7748, 7748, 7 },
    { 7749, 7749, 5 },
    { 7750, 7750, 7 },
    { 7751, 7751, 5 },
    { 7752, 7752, 7 },
    { 7753, 7753, 5 },
    { 7754, 7754, 7 },
    { 7755, 7755, 5 },
    { 7756, 7756, 7 },
    { 7757, 7757, 5 },
    { 7758, 7758, 7 },
    { 7759, 7759, 5 },
    { 7760, 7760, 7 },
    { 7761, 7761, 5 },
    { 7762, 7762, 7 },
    { 7763, 7763, 5 },
    { 7764, 7764, 7 },
    { 7765, 7765, 5 },
    { 7766, 7766, 7 },
    { 7767, 7767, 5 },
    { 7768, 7768, 7 },
    { 7769, 7769, 5 },
    { 7770, 7770, 7 },
    { 7771, 7771, 5 },
    { 7772, 7772, 7 },
    { 7773, 7773, 5 },
    { 7774, 7774, 7 },
    { 7775, 7775, 5 },
    { 7776, 7776, 7 },
    { 7777, 7777, 5 },
    { 7778, 7778, 7 },
    { 7779, 7779, 5 },
    { 7780, 7780, 7 },
    { 7781, 7781, 5 },
    { 7782, 7782, 7 },
    { 7783, 7783, 5 },
    { 7784, 7784, 7 },
    { 7785, 7785, 5 },
    { 7786, 7786, 7 },
    { 7787, 7787, 5 },
    { 7788, 7788, 7 },
    { 7789, 7789, 5 },
    { 7790, 7790, 7 },
    { 7791, 7791, 5 },
    { 7792, 7792, 7 },
    { 7793, 7793, 5 },
    { 7794, 7794, 7 },
    { 7795, 7795, 5 },
    { 7796, 7796, 7 },
    { 7797, 7797, 5 },
    { 7798, 7798, 7 },
    { 7799, 7799, 5 },
    { 7800, 7800, 7 },
    { 7801, 7801, 5 },
    { 7802, 7802, 7 },
    { 7803, 7803, 5 },
    { 7804, 7804, 7 },
    { 7805, 7805, 5 },
    { 7806, 7806, 7 },
    { 7807, 7807, 5 },
    { 7808, 7808, 7 },
    { 7809, 7809, 5 },
    { 7810, 7810, 7 },
    { 7811, 7811, 5 },
    { 7812, 7812, 7 },
    { 7813, 7813, 5 },
    { 7814, 7814, 7 },
    { 7815, 7815, 5 },
    { 7816, 7816, 7 },
    { 7817, 7817, 5 },
    { 7818, 7818, 7 },
    { 7819, 7819, 5 },
    { 7820, 7820, 7 },
    { 7821, 7821, 5 },
    { 7822, 7822, 7 },
    { 7823, 7823, 5 },
    { 7824, 7824, 7 },
    { 7825, 7825, 5 },
    { 7826, 7826, 7 },
    { 7827, 7827, 5 },
    { 7828, 7828, 7 },
    { 7829, 7835, 5 },
    { 7840, 7840, 7 },
    { 7841, 7841, 5 },
    { 7842, 7842, 7 },
    { 7843, 7843, 5 },
    { 7844, 7844, 7 },
    { 7845, 7845, 5 },
    { 7846, 7846, 7 },
    { 7847, 7847, 5 },
    { 7848, 7848, 7 },
    { 7849, 7849, 5 },
    { 7850, 7850, 7 },
    { 7851, 7851, 5 },
    { 7852, 7852, 7 },
    { 7853, 7853, 5 },
    { 7854, 7854, 7 },
    { 7855, 7855, 5 },
    { 7856, 7856, 7 },
    { 7857, 7857, 5 },
    { 7858, 7858, 7 },
    { 7859, 7859, 5 },
    { 7860, 7860, 7 },
    { 7861, 7861, 5 },
    { 7862, 7862, 7 },
    { 7863, 7863, 5 },
    { 7864, 7864, 7 },
    { 7865, 7865, 5 },
    { 7866, 7866, 7 },
    { 7867, 7867, 5 },
    { 7868, 7868, 7 },
    { 7869, 7869, 5 },
    { 7870, 7870, 7 },
    { 7871, 7871, 5 },
    { 7872, 7872, 7 },
    { 7873, 7873, 5 },
    { 7874, 7874, 7 },
    { 7875, 7875, 5 },
    { 7876, 7876, 7 },
    { 7877, 7877, 5 },
    { 7878, 7878, 7 },
    { 7879, 7879, 5 },
    { 7880, 7880, 7 },
    { 7881, 7881, 5 },
    { 7882, 7882, 7 },
    { 7883, 7883, 5 },
    { 7884, 7884, 7 },
    { 7885, 7885, 5 },
    { 7886, 7886, 7 },
    { 7887, 7887, 5 },
    { 7888, 7888, 7 },
    { 7889, 7889, 5 },
    { 7890, 7890, 7 },
    { 7891, 7891, 5 },
    { 7892, 7892, 7 },
    { 7893, 7893, 5 },
    { 7894, 7894, 7 },
    { 7895, 7895, 5 },
    { 7896, 7896, 7 },
    { 7897, 7897, 5 },
    { 7898, 7898, 7 },
    { 7899, 7899, 5 },
    { 7900, 7900, 7 },
    { 7901, 7901, 5 },
    { 7902, 7902, 7 },
    { 7903, 7903, 5 },
    { 7904, 7904, 7 },
    { 7905, 7905, 5 },
    { 7906, 7906, 7 },
    { 7907, 7907, 5 },
    { 7908, 7908, 7 },
    { 7909, 7909, 5 },
    { 7910, 7910, 7 },
    { 7911, 7911, 5 },
    { 7912, 7912, 7 },
    { 7913, 7913, 5 },
    { 7914, 7914, 7 },
    { 7915, 7915, 5 },
    { 7916, 7916, 7 },
    { 7917, 7917, 5 },
    { 7918, 7918, 7 },
    { 7919, 7919, 5 },
    { 7920, 7920, 7 },
    { 7921, 7921, 5 },
    { 7922, 7922, 7 },
    { 7923, 7923, 5 },
    { 7924, 7924, 7 },
    { 7925, 7925, 5 },
    { 7926, 7926, 7 },
    { 7927, 7927, 5 },
    { 7928, 7928, 7 },
    { 7929, 7929, 5 },
    { 7936, 7943, 5 },
    { 7944, 7951, 7 },
    { 7952, 7957, 5 },
    { 7960, 7965, 7 },
    { 7968, 7975, 5 },
    { 7976, 7983, 7 },
    { 7984, 7991, 5 },
    { 7992, 7999, 7 },
    { 8000, 8005, 5 },
    { 8008, 8013, 7 },
    { 8016, 8023, 5 },
    { 8025, 8025, 7 },
    { 8027, 8027, 7 },
    { 8029, 8029, 7 },
    { 8031, 8031, 7 },
    { 8032, 8039, 5 },
    { 8040, 8047, 7 },
    { 8048, 8061, 5 },
    { 8064, 8071, 5 },
    { 8072, 8079, 6 },
    { 8080, 8087, 5 },
    { 8088, 8095, 6 },
    { 8096, 8103, 5 },
    { 8104, 8111, 6 },
    { 8112, 8116, 5 },
    { 8118, 8119, 5 },
    { 8120, 8123, 7 },
    { 8124, 8124, 6 },
    { 8125, 8125, 24 },
    { 8126, 8126, 5 },
    { 8127, 8129, 24 },
    { 8130, 8132, 5 },
    { 8134, 8135, 5 },
    { 8136, 8139, 7 },
    { 8140, 8140, 6 },
    { 8141, 8143, 24 },
    { 8144, 8147, 5 },
    { 8150, 8151, 5 },
    { 8152, 8155, 7 },
    { 8157, 8159, 24 },
    { 8160, 8167, 5 },
    { 8168, 8172, 7 },
    { 8173, 8175, 24 },
    { 8178, 8180, 5 },
    { 8182, 8183, 5 },
    { 8184, 8187, 7 },
    { 8188, 8188, 6 },
    { 8189, 8190, 24 },
    { 8192, 8202, 29 },
    { 8203, 8207, 2 },
    { 8208, 8213, 17 },
    { 8214, 8215, 21 },
    { 8216, 8216, 20 },
    { 8217, 8217, 19 },
    { 8218, 8218, 22 },
    { 8219, 8220, 20 },
    { 8221, 8221, 19 },
    { 8222, 8222, 22 },
    { 8223, 8223, 20 },
    { 8224, 8231, 21 },
    { 8232, 8232, 27 },
    { 8233, 8233, 28 },
    { 8234, 8238, 2 },
    { 8239, 8239, 29 },
    { 8240, 8248, 21 },
    { 8249, 8249, 20 },
    { 8250, 8250, 19 },
    { 8251, 8254, 21 },
    { 8255, 8256, 16 },
    { 8257, 8259, 21 },
    { 8260, 8260, 25 },
    { 8261, 8261, 22 },
    { 8262, 8262, 18 },
    { 8263, 8273, 21 },
    { 8274, 8274, 25 },
    { 8275, 8275, 21 },
    { 8276, 8276, 16 },
    { 8279, 8279, 21 },
    { 8287, 8287, 29 },
    { 8288, 8291, 2 },
    { 8298, 8303, 2 },
    { 8304, 8304, 15 },
    { 8305, 8305, 5 },
    { 8308, 8313, 15 },
    { 8314, 8316, 25 },
    { 8317, 8317, 22 },
    { 8318, 8318, 18 },
    { 8319, 8319, 5 },
    { 8320, 8329, 15 },
    { 8330, 8332, 25 },
    { 8333, 8333, 22 },
    { 8334, 8334, 18 },
    { 8352, 8369, 23 },
    { 8400, 8412, 12 },
    { 8413, 8416, 11 },
    { 8417, 8417, 12 },
    { 8418, 8420, 11 },
    { 8421, 8426, 12 },
    { 8448, 8449, 26 },
    { 8450, 8450, 7 },
    { 8451, 8454, 26 },
    { 8455, 8455, 7 },
    { 8456, 8457, 26 },
    { 8458, 8458, 5 },
    { 8459, 8461, 7 },
    { 8462, 8463, 5 },
    { 8464, 8466, 7 },
    { 8467, 8467, 5 },
    { 8468, 8468, 26 },
    { 8469, 8469, 7 },
    { 8470, 8472, 26 },
    { 8473, 8477, 7 },
    { 8478, 8483, 26 },
    { 8484, 8484, 7 },
    { 8485, 8485, 26 },
    { 8486, 8486, 7 },
    { 8487, 8487, 26 },
    { 8488, 8488, 7 },
    { 8489, 8489, 26 },
    { 8490, 8493, 7 },
    { 8494, 8494, 26 },
    { 8495, 8495, 5 },
    { 8496, 8497, 7 },
    { 8498, 8498, 26 },
    { 8499, 8499, 7 },
    { 8500, 8500, 5 },
    { 8501, 8504, 9 },
    { 8505, 8505, 5 },
    { 8506, 8507, 26 },
    { 8509, 8509, 5 },
    { 8510, 8511, 7 },
    { 8512, 8516, 25 },
    { 8517, 8517, 7 },
    { 8518, 8521, 5 },
    { 8522, 8522, 26 },
    { 8523, 8523, 25 },
    { 8531, 8543, 15 },
    { 8544, 8579, 14 },
    { 8592, 8596, 25 },
    { 8597, 8601, 26 },
    { 8602, 8603, 25 },
    { 8604, 8607, 26 },
    { 8608, 8608, 25 },
    { 8609, 8610, 26 },
    { 8611, 8611, 25 },
    { 8612, 8613, 26 },
    { 8614, 8614, 25 },
    { 8615, 8621, 26 },
    { 8622, 8622, 25 },
    { 8623, 8653, 26 },
    { 8654, 8655, 25 },
    { 8656, 8657, 26 },
    { 8658, 8658, 25 },
    { 8659, 8659, 26 },
    { 8660, 8660, 25 },
    { 8661, 8691, 26 },
    { 8692, 8959, 25 },
    { 8960, 8967, 26 },
    { 8968, 8971, 25 },
    { 8972, 8991, 26 },
    { 8992, 8993, 25 },
    { 8994, 9000, 26 },
    { 9001, 9001, 22 },
    { 9002, 9002, 18 },
    { 9003, 9083, 26 },
    { 9084, 9084, 25 },
    { 9085, 9114, 26 },
    { 9115, 9139, 25 },
    { 9140, 9140, 22 },
    { 9141, 9141, 18 },
    { 9142, 9142, 21 },
    { 9143, 9168, 26 },
    { 9216, 9254, 26 },
    { 9280, 9290, 26 },
    { 9312, 9371, 15 },
    { 9372, 9449, 26 },
    { 9450, 9471, 15 },
    { 9472, 9654, 26 },
    { 9655, 9655, 25 },
    { 9656, 9664, 26 },
    { 9665, 9665, 25 },
    { 9666, 9719, 26 },
    { 9720, 9727, 25 },
    { 9728, 9751, 26 },
    { 9753, 9838, 26 },
    { 9839, 9839, 25 },
    { 9840, 9853, 26 },
    { 9856, 9873, 26 },
    { 9888, 9889, 26 },
    { 9985, 9988, 26 },
    { 9990, 9993, 26 },
    { 9996, 10023, 26 },
    { 10025, 10059, 26 },
    { 10061, 10061, 26 },
    { 10063, 10066, 26 },
    { 10070, 10070, 26 },
    { 10072, 10078, 26 },
    { 10081, 10087, 26 },
    { 10088, 10088, 22 },
    { 10089, 10089, 18 },
    { 10090, 10090, 22 },
    { 10091, 10091, 18 },
    { 10092, 10092, 22 },
    { 10093, 10093, 18 },
    { 10094, 10094, 22 },
    { 10095, 10095, 18 },
    { 10096, 10096, 22 },
    { 10097, 10097, 18 },
    { 10098, 10098, 22 },
    { 10099, 10099, 18 },
    { 10100, 10100, 22 },
    { 10101, 10101, 18 },
    { 10102, 10131, 15 },
    { 10132, 10132, 26 },
    { 10136, 10159, 26 },
    { 10161, 10174, 26 },
    { 10192, 10213, 25 },
    { 10214, 10214, 22 },
    { 10215, 10215, 18 },
    { 10216, 10216, 22 },
    { 10217, 10217, 18 },
    { 10218, 10218, 22 },
    { 10219, 10219, 18 },
    { 10224, 10239, 25 },
    { 10240, 10495, 26 },
    { 10496, 10626, 25 },
    { 10627, 10627, 22 },
    { 10628, 10628, 18 },
    { 10629, 10629, 22 },
    { 10630, 10630, 18 },
    { 10631, 10631, 22 },
    { 10632, 10632, 18 },
    { 10633, 10633, 22 },
    { 10634, 10634, 18 },
    { 10635, 10635, 22 },
    { 10636, 10636, 18 },
    { 10637, 10637, 22 },
    { 10638, 10638, 18 },
    { 10639, 10639, 22 },
    { 10640, 10640, 18 },
    { 10641, 10641, 22 },
    { 10642, 10642, 18 },
    { 10643, 10643, 22 },
    { 10644, 10644, 18 },
    { 10645, 10645, 22 },
    { 10646, 10646, 18 },
    { 10647, 10647, 22 },
    { 10648, 10648, 18 },
    { 10649, 10711, 25 },
    { 10712, 10712, 22 },
    { 10713, 10713, 18 },
    { 10714, 10714, 22 },
    { 10715, 10715, 18 },
    { 10716, 10747, 25 },
    { 10748, 10748, 22 },
    { 10749, 10749, 18 },
    { 10750, 11007, 25 },
    { 11008, 11021, 26 },
    { 11904, 11929, 26 },
    { 11931, 12019, 26 },
    { 12032, 12245, 26 },
    { 12272, 12283, 26 },
    { 12288, 12288, 29 },
    { 12289, 12291, 21 },
    { 12292, 12292, 26 },
    { 12293, 12293, 8 },
    { 12294, 12294, 9 },
    { 12295, 12295, 14 },
    { 12296, 12296, 22 },
    { 12297, 12297, 18 },
    { 12298, 12298, 22 },
    { 12299, 12299, 18 },
    { 12300, 12300, 22 },
    { 12301, 12301, 18 },
    { 12302, 12302, 22 },
    { 12303, 12303, 18 },
    { 12304, 12304, 22 },
    { 12305, 12305, 18 },
    { 12306, 12307, 26 },
    { 12308, 12308, 22 },
    { 12309, 12309, 18 },
    { 12310, 12310, 22 },
    { 12311, 12311, 18 },
    { 12312, 12312, 22 },
    { 12313, 12313, 18 },
    { 12314, 12314, 22 },
    { 12315, 12315, 18 },
    { 12316, 12316, 17 },
    { 12317, 12317, 22 },
    { 12318, 12319, 18 },
    { 12320, 12320, 26 },
    { 12321, 12329, 14 },
    { 12330, 12335, 12 },
    { 12336, 12336, 17 },
    { 12337, 12341, 8 },
    { 12342, 12343, 26 },
    { 12344, 12346, 14 },
    { 12347, 12347, 8 },
    { 12348, 12348, 9 },
    { 12349, 12349, 21 },
    { 12350, 12351, 26 },
    { 12353, 12438, 9 },
    { 12441, 12442, 12 },
    { 12443, 12444, 24 },
    { 12445, 12446, 8 },
    { 12447, 12447, 9 },
    { 12448, 12448, 17 },
    { 12449, 12538, 9 },
    { 12539, 12539, 16 },
    { 12540, 12542, 8 },
    { 12543, 12543, 9 },
    { 12549, 12588, 9 },
    { 12593, 12686, 9 },
    { 12688, 12689, 26 },
    { 12690, 12693, 15 },
    { 12694, 12703, 26 },
    { 12704, 12727, 9 },
    { 12784, 12799, 9 },
    { 12800, 12830, 26 },
    { 12832, 12841, 15 },
    { 12842, 12867, 26 },
    { 12880, 12880, 26 },
    { 12881, 12895, 15 },
    { 12896, 12925, 26 },
    { 12927, 12927, 26 },
    { 12928, 12937, 15 },
    { 12938, 12976, 26 },
    { 12977, 12991, 15 },
    { 12992, 13054, 26 },
    { 13056, 13311, 26 },
    { 13312, 13312, 9 },
    { 19893, 19893, 9 },
    { 19904, 19967, 26 },
    { 19968, 40869, 9 },
    { 40960, 42124, 9 },
    { 42128, 42182, 26 },
    { 44032, 44032, 9 },
    { 55203, 55203, 9 },
    { 55296, 55296, 4 },
    { 56191, 56192, 4 },
    { 56319, 56320, 4 },
    { 57343, 57343, 4 },
    { 57344, 57344, 3 },
    { 63743, 63743, 3 },
    { 63744, 64045, 9 },
    { 64048, 64106, 9 },
    { 64256, 64262, 5 },
    { 64275, 64279, 5 },
    { 64285, 64285, 9 },
    { 64286, 64286, 12 },
    { 64287, 64296, 9 },
    { 64297, 64297, 25 },
    { 64298, 64310, 9 },
    { 64312, 64316, 9 },
    { 64318, 64318, 9 },
    { 64320, 64321, 9 },
    { 64323, 64324, 9 },
    { 64326, 64433, 9 },
    { 64467, 64829, 9 },
    { 64830, 64830, 22 },
    { 64831, 64831, 18 },
    { 64848, 64911, 9 },
    { 64914, 64967, 9 },
    { 65008, 65019, 9 },
    { 65020, 65020, 23 },
    { 65021, 65021, 26 },
    { 65024, 65039, 12 },
    { 65056, 65059, 12 },
    { 65072, 65072, 21 },
    { 65073, 65074, 17 },
    { 65075, 65076, 16 },
    { 65077, 65077, 22 },
    { 65078, 65078, 18 },
    { 65079, 65079, 22 },
    { 65080, 65080, 18 },
    { 65081, 65081, 22 },
    { 65082, 65082, 18 },
    { 65083, 65083, 22 },
    { 65084, 65084, 18 },
    { 65085, 65085, 22 },
    { 65086, 65086, 18 },
    { 65087, 65087, 22 },
    { 65088, 65088, 18 },
    { 65089, 65089, 22 },
    { 65090, 65090, 18 },
    { 65091, 65091, 22 },
    { 65092, 65092, 18 },
    { 65093, 65094, 21 },
    { 65095, 65095, 22 },
    { 65096, 65096, 18 },
    { 65097, 65100, 21 },
    { 65101, 65103, 16 },
    { 65104, 65106, 21 },
    { 65108, 65111, 21 },
    { 65112, 65112, 17 },
    { 65113, 65113, 22 },
    { 65114, 65114, 18 },
    { 65115, 65115, 22 },
    { 65116, 65116, 18 },
    { 65117, 65117, 22 },
    { 65118, 65118, 18 },
    { 65119, 65121, 21 },
    { 65122, 65122, 25 },
    { 65123, 65123, 17 },
    { 65124, 65126, 25 },
    { 65128, 65128, 21 },
    { 65129, 65129, 23 },
    { 65130, 65131, 21 },
    { 65136, 65140, 9 },
    { 65142, 65276, 9 },
    { 65279, 65279, 2 },
    { 65281, 65283, 21 },
    { 65284, 65284, 23 },
    { 65285, 65287, 21 },
    { 65288, 65288, 22 },
    { 65289, 65289, 18 },
    { 65290, 65290, 21 },
    { 65291, 65291, 25 },
    { 65292, 65292, 21 },
    { 65293, 65293, 17 },
    { 65294, 65295, 21 },
    { 65296, 65305, 13 },
    { 65306, 65307, 21 },
    { 65308, 65310, 25 },
    { 65311, 65312, 21 },
    { 65313, 65338, 7 },
    { 65339, 65339, 22 },
    { 65340, 65340, 21 },
    { 65341, 65341, 18 },
    { 65342, 65342, 24 },
    { 65343, 65343, 16 },
    { 65344, 65344, 24 },
    { 65345, 65370, 5 },
    { 65371, 65371, 22 },
    { 65372, 65372, 25 },
    { 65373, 65373, 18 },
    { 65374, 65374, 25 },
    { 65375, 65375, 22 },
    { 65376, 65376, 18 },
    { 65377, 65377, 21 },
    { 65378, 65378, 22 },
    { 65379, 65379, 18 },
    { 65380, 65380, 21 },
    { 65381, 65381, 16 },
    { 65382, 65391, 9 },
    { 65392, 65392, 8 },
    { 65393, 65437, 9 },
    { 65438, 65439, 8 },
    { 65440, 65470, 9 },
    { 65474, 65479, 9 },
    { 65482, 65487, 9 },
    { 65490, 65495, 9 },
    { 65498, 65500, 9 },
    { 65504, 65505, 23 },
    { 65506, 65506, 25 },
    { 65507, 65507, 24 },
    { 65508, 65508, 26 },
    { 65509, 65510, 23 },
    { 65512, 65512, 26 },
    { 65513, 65516, 25 },
    { 65517, 65518, 26 },
    { 65529, 65531, 2 },
    { 65532, 65533, 26 },
}; // s_rgoCatEntry


//////////////////////////////////////////////////////////////////////
//
// build_13_Characters
//
void init_13_Characters()
{
    Defobject(QQchar_min, 
        MiniThread::Get()->AllocBinObj(CLASSD_character) );

    for (uint nCode = 1; nCode <= 0xFFFF; nCode++)
    {
        MiniThread::Get()->AllocBinObj(CLASSD_character);
    } // for nCode

    for (uint nCode = 0; nCode <= 0xFFFF; nCode++)
    {
        char16 nLower = static_cast<char16>(reinterpret_cast<UInt>(
            ::CharLowerW(reinterpret_cast<char16*>(
                static_cast<UInt>(nCode))) ) );

        char16 nUpper = static_cast<char16>(reinterpret_cast<UInt>(
            ::CharUpperW(reinterpret_cast<char16*>(
                static_cast<UInt>(nCode))) ) );

        Int nData = 0;

        if (::IsCharAlphaW(static_cast<char16>(nCode)))
        {
            nData |= Character::Attr_Alpha;
        }
        else if (::IsCharAlphaNumericW(static_cast<char16>(nCode)))
        {
            nData |= Character::Attr_Numeric;
        }

        if (nUpper != nLower)
        {
            if (nUpper == nCode)
            {
                nData |= Character::Attr_UpperCase;
            }

            if (nLower == nCode)
            {
                nData |= Character::Attr_LowerCase;
            }
        }

        #if SIZEOF_VAL == 4
        {
            ASSERT(sizeof(Character) == 8);

            if (nData & Character::Attr_UpperCase)
            {
                nData |=
                    static_cast<Int>(nLower) << Character::CaseShiftCount;
            }

            if (nData & Character::Attr_LowerCase)
            {
                nData |=
                    static_cast<Int>(nUpper) << Character::CaseShiftCount;
            }
        }
        #endif // SIZEOF_VAL == 4

        #if SIZEOF_VAL == 8
        {
            nData |= static_cast<Int>(nLower) << Character::LowerShiftCount;
            nData |= static_cast<Int>(nUpper) << Character::UpperShiftCount;
        }
        #endif // SIZEOF_VAL == 8

        Character* pChar = Character::Encode(
            static_cast<char16>(nCode))->Decode<Character>();

        pChar->m_data = FromInt<Val_>(nData);
    } // for nCode
} // init_13_Characters


static void set_char_attr(uint nCode, uint nAttr)
{
    Character* pChar = Character::Encode(static_cast<char16>(nCode))->
        Decode<Character>();

    pChar->m_data = FromInt<Val_>(pChar->m_data->ToInt() | nAttr);
} // set_char_attr


//////////////////////////////////////////////////////////////////////
//
// build_13_Characters
//
void build_13_Characters()
{
    #define defcat(mp_name, mp_cat) \
        defconstant(L"UNICODE:CATEGORY-" L##mp_name, Fixnum::Encode(mp_cat))

    // General Category Constants
    defcat("CONTROL-MIN", 0);
    defcat("UNASSIGNED", 0);     // CN
    defcat("CONTROL", 1);     // CC
    defcat("FORMAT", 2);     // CF
    defcat("PRIVATE-USE", 3);     // CO
    defcat("SURROGATE", 4);     // CS
    defcat("CONTROL-MAX", 4);

    // NOTE: FOR \P{L&}, WE ASSIGN CONSECUTIVE NUMBERS FOR LL, LT, LU.
    defcat("LETTER-MIN", 5);
    defcat("LOWERCASE-LETTER", 5);     // LL
    defcat("TITLECASE-LETTER", 6);     // LT
    defcat("UPPERCASE-LETTER", 7);     // LU
    defcat("MODIFIER-LETTER", 8);     // LM
    defcat("OTHER-LETTER", 9);     // LO
    defcat("LETTER-MAX", 9);

    defcat("MARK-MIN", 10);
    defcat("COMBINING-SPACING-MARK", 10);     // MC
    defcat("ENCLOSING-MARK", 11);     // ME
    defcat("NON-SPACING-MARK", 12);     // MN
    defcat("MARK-MAX", 12);

    defcat("NUMBER-MIN", 13);
    defcat("DECIMAL-DIGIT-NUMBER", 13);     // ND
    defcat("LETTER-NUMBER", 14);     // NL
    defcat("OTHER-NUMBER", 15);     // NO
    defcat("NUMBER-MAX", 15);

    defcat("PUNCTUATION-MIN", 16);
    defcat("CONNECTOR-PUNCTUATION", 16);     // PC
    defcat("DASH-PUNCTUATION", 17);     // PD
    defcat("CLOSE-PUNCTUATION", 18);     // PE
    defcat("FINAL-PUNCTUATION", 19);     // PF
    defcat("INITIAL-PUNCTUATION", 20);     // PI
    defcat("OTHER-PUNCTUATION", 21);     // PO
    defcat("OPEN-PUNCTUATION", 22);     // PS
    defcat("PUNCTUATION-MAX", 22);

    defcat("SYMBOL-MIN", 23);
    defcat("CURRENCY-SYMBOL", 23);     // SC
    defcat("MODIFIER-SYMBOL", 24);     // SK
    defcat("MATH-SYMBOL", 25);     // SM
    defcat("OTHER-SYMBOL", 26);     // SO
    defcat("SYMBOL-MAX", 26);

    defcat("SEPARATOR-MIN", 27);
    defcat("LINE-SEPARATOR", 27);     // ZL
    defcat("PARAGRAPH-SEPARATOR", 28);     // ZP
    defcat("SPACE-SEPARATOR", 29);     // ZS
    defcat("SEPARATOR-MAX", 29);


    deftype(Q("UNICODE:CATEGORY"),
        list(Qinteger, Fixnum::Encode(0), Fixnum::Encode(29)) );

    // Unicode Category
    for (
        const CatEntry* p = &s_rgoCatEntry[0];
        p < &s_rgoCatEntry[lengthof(s_rgoCatEntry)];
        p++ )
    {
        for (uint nCode = p->m_nMin; nCode <= p->m_nMax; nCode++)
        {
            Val ch = Character::Encode(static_cast<char16>(nCode));
            Int nData = ch->Decode<Character>()->m_data->ToInt();
            nData |= p->m_nCategory * Fixnum::One;
            ch->Decode<Character>()->m_data = FromInt<Val_>(nData);
        } // for code
    } // for p

    for (uint nCode = 0; nCode <= 0xFFFF; nCode++)
    {
        Character* pChar = Character::Encode(
            static_cast<char16>(nCode))->Decode<Character>();

        Int nData = pChar->m_data->ToInt();

        Int nCategory = (nData & Character::Attr_CategoryMask) / Fixnum::One;

        if (nCategory == Character::Category_SpaceSeparator)
        {
            nData |= Character::Attr_Whitespace;
        }

        unless (nCategory >= Character::Category_ControlMin &&
                nCategory <= Character::Category_ControlMax )
        {
            nData |= Character::Attr_Graphic;
        }

        pChar->m_data = FromInt<Val_>(nData);
    } // for code

    set_char_attr(0x0009, Character::Attr_Whitespace);
    set_char_attr(0x000A, Character::Attr_Whitespace);
    set_char_attr(0x000C, Character::Attr_Whitespace);
    set_char_attr(0x000D, Character::Attr_Whitespace);

    for (uint nCode = 0x20; nCode <= 0x7E; nCode++)
    {
        set_char_attr(nCode, Character::Attr_Standard);
    } // for nCode

    set_char_attr(0x000A, Character::Attr_Standard);

    //////////////////////////////////////////////////////////////////////
    //
    // Character Name
    //
    Val char_name_table = make_hash_table(Qeq);
    Val name_char_table = make_hash_table(Qequalp);

    VAR(Achar_name_tableA) = char_name_table;
    VAR(Aname_char_tableA) = name_char_table;

    struct Entry
    {
        Int     m_wch;
        const char16* m_pwsz;
    }; // Entry

    static const Entry k_rgo[] =
    {
        { 0x08, L"Backspace" },
        { 0x09, L"Tab" },
        { 0x0A, L"Linefeed" },
        { 0x0A, L"Newline" },
        { 0x0C, L"Page" },
        { 0x0D, L"Return" },
        { 0x1B, L"Escape" },
        { 0x20, L"Space" },
        { 0x7F, L"Rubout" },
        { 0x7F, L"Delete" },
    }; // k_rgo

    for (const Entry* p = &k_rgo[0]; p < &k_rgo[lengthof(k_rgo)]; p++)
    {
        Val ch = Character::Encode(static_cast<char16>(p->m_wch));
        Val name = make_string(p->m_pwsz);
        setf_gethash(name, ch, char_name_table);
        setf_gethash(ch, name, name_char_table);
    } // for
} // build_13_Characters

} // Boot
